﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using MoroMoro.Samples.ToDoList.Application.Categories;
using MoroMoro.Samples.ToDoList.Domain.Categories;
using MoroMoro.Samples.ToDoList.Presentation.ErrorMessages;

namespace MoroMoro.Samples.ToDoList.Presentation.Presenters
{
    partial class ToDoListPresenter
    {
        /// <summary>
        /// カテゴリ作成ボタンがクリックされた時の処理を行います。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnCategoryCreationButtonClick(object sender, EventArgs e)
        {
            View.ShowCategoryCreationForm(_facade);
        }

        /// <summary>
        /// カテゴリ編集ボタンがクリックされた時の処理を行います。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnCategoryEditonButtonClick(object sender, EventArgs e)
        {
            var target = View.SelectedCategory;

            if (target == null)
            {
                View.ShowWarningMessageBox("カテゴリを選択してください。");
                return;
            }
            View.ShowCategoryEditionForm(_facade, target);
        }

        /// <summary>
        /// カテゴリ削除ボタンがクリックされた時の処理を行います。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnCategoryDeletionButtonClick(object sender, EventArgs e)
        {
            var target = View.SelectedCategory;

            if (target == null)
            {
                View.ShowWarningMessageBox("カテゴリを選択してください。");
                return;
            }
            if (View.ShowYesNoMessageBox("カテゴリを削除する場合、対象のカテゴリに属する ToDo も削除されます。\n削除してよろしいですか？") == DialogResult.No)
            {
                return;
            }


            _facade.ExecuteCategoryDeletion(
                new[] { target },
                (errors) =>
                {
                    var errorMessage = new EntityDeletionErrorMessage();
                    errors.HandledBy(errorMessage);
                    View.ShowErrorMessageBox(errorMessage);
                });
        }
    }
}
